package com.company.sendemo.basics.avIOStream.serialize;


//java 实例化 的几种方法总结
public class instantiation {
    //java创建有四种方式:
    //(1)用new语句创建对象，这是最常用的创建对象方法
    //(2)运用反射手段，调用 java.lang.Class 或者  java.lang.reflect.Constructor 类的 newInstance()实例方法
    //(3)调用对象的clone()方法
    //（4）运用反序列化手段，调用 java.io.ObjectInputStream 对象的readObject()方法

    /*用new语句创建对象*/
    User user = new User();

    /*运用反射机制
    *根据依赖倒转原则，实际编码过程中要针对接口编程而不是具体类编程。
    * 在面向接口编程的模式中，经常用此方法来动态创建实例。
    * 如从XML配置文件中获取具体子类的类名字符串subClassName,然后根据获得的类名字符串进行实例化：
    * */
//    Class c = Class.forName();  //实例化
//    （1）java.lang.Class.newInstance()
//       User users = (User) c.newInstance()  ; //不带参数
//     （2）java.lang.reflect.Constructor类的newInstance（）
//     Constructor con = c.getConstructor(String.class);
//     User userss = (User) con.newInstance("name");
//
//    public Object getNewObject(String className)  throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//        //class.forName（类的全路径）、实例对象.class(属性)、实例对象getClass(),这三种方式都能得到class
//        Class tClass=Class.forName(className);
//        Object tObject=tClass.newInstance();
//        return tObject;
//    }

    /*调用对象的clone（）方法*/
//    User user1 = new User(1,"dan");
//    User user2 = null;
//    user2 = (User) user1.clone();

    /*运用反序列化手段
    * 序列化：将对象状态转化为可保持或传输的格式的过程，被序列化的对象必须implments Serializable
    * 反序列化：将流转化成对象的过程
    *
    * 见 TestOne 类
    * */
}
